package com.example.tliasfight.controller;

import com.example.tliasfight.anno.Mylog;
import com.example.tliasfight.pojo.Dept;
import com.example.tliasfight.pojo.Result;
import com.example.tliasfight.service.DeptService;
import com.example.tliasfight.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j //为当前类建立一个日志对象替代了声明语句而已 // private static Logger log = LoggerFactory.getLogger(DeptController.class);
@RestController
@RequestMapping("/depts")
public class DeptController
{//这些方法之所以没有去声明调用哪个对象，而是能通过路径直接执行这个方法，其实都是调用bean对象的对应方法。因为声明控制器类的注解同时也是声明bean的注解。有没有main就不重要了。我只需要在某个地方调用该对象的方法就行了

    @Autowired
    private DeptService deptService;

   // @RequestMapping(value="/depts",method= RequestMethod.GET)限定请求方式方式为get，并且制定了请求路径为/depts

    @PostMapping
    @Mylog
    public Result addDept(@RequestBody Dept dept)
    {

    log.info("新增部门数据");
    deptService.addDept(dept);
    return Result.success();
    }

    @DeleteMapping("/{id}")
    @Mylog
    public Result deleteById (@PathVariable Integer id)throws  Exception
    {

        log.info("根据id删除部门数据:{}",id);
        deptService.deleteById(id);
        //Controller只负责抓住对应的访问路径然后返回响应体，但是不能处理业务逻辑，所以需要调用Service层的对象（被自动分配了bean）
        // 调用当前业务逻辑对象的删除功能，又因为删除对象的业务逻辑只需要一个sql语句，所以说service层只需要调一个mapper层的方法去执行对应的sql语句就行了，那整个删除功能的一个业务逻辑就完成了。（没啥业务逻辑，有一个业务逻辑的是在mapper层的sql语句中。）
        return Result.success();
        }
    @PutMapping
    @Mylog
    public Result updateDeptNameById(@RequestBody Dept dept)
    {
        log.info("根据id修改部门数据");
        // selectById(3).setData(dept);想复杂了，他已经把id封装到了Dept对象中，而不是调用单独的查询方法，把id传入到单独的查询方法当中
        deptService.updateDeptNameById(dept);
        return Result.success();
    }


    @GetMapping("/{id}")//用于数据回显，在类似表单页面进行展示，虽然不是首页的，但是也属于查询操作
    public  Result selectById(@PathVariable Integer id)
    {
        log.info("根据id查询部门数据");
        Dept dept = deptService.selectById(id);
        return Result.success(dept);
    }
    @GetMapping
    public Result selectAll()
    {
//        System.out.println("查询全部部门数据");
        log.info("查询全部部门数据");
        List<Dept> deptList = deptService.selectAll();
        return Result.success(deptList);
    }


}
